\documentclass{article}
\usepackage{ctex}
\usepackage{graphicx, subcaption}

% Language setting
% Replace `english' with e.g. `spanish' to change the document language
\usepackage[english]{babel}

% Set page size and margins
% Replace `letterpaper' with `a4paper' for UK/EU standard size
\usepackage[letterpaper,top=2cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
\geometry{margin=1in}
% Useful packages
\usepackage{amsmath}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}

% SQL语言
\usepackage{listings}
\usepackage{xcolor}

\begin{document}
	
	% 自定义标题页
	\begin{titlepage}
		\begin{center}
			\vspace*{1cm}
			
			% 实验标题
			\Huge
			\textbf{编译原理第四次实验}
			
			\vspace{0.5cm}
			
			\vspace{1.5cm}
			
			% 作者信息表格
			\Large
			\begin{tabular}{rl}
				姓名： & 侯浩然 \\
				班级： & 计算机2106 \\
				学号： & 2211314605 \\
			\end{tabular}
			
			\vfill
			
			% 实验日期
			\Large
			\today
			
		\end{center}
	\end{titlepage}
	
	\section{题目分析}
		根据提供的slrs.cpp，可输出2种以上的文法SLR(1)分析表。输出效果如下图所示：
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot001}
			\caption{}
			\label{fig:screenshot001}
		\end{figure}
		
		
		通过对slrs.cpp代码进行分析，本次实验决定对slrs.cpp进行文法扩充，提供2种文法输出。
		在本次实验中，仅完成了必做部分，独立完成。

	\section{文法设计}
		
		为了更好的适配源代码，在文法设计上，决定仅对原来内容扩充，扩充减法和除法两种运算法则。
		所以现在的推导规则为：
		
		E->E+T|E-T|T;
		
		T->T*F|T/F|F;
		
		F->(E)|i;
		
		容易看出，这个规则包括了所有加减乘除的句子。
		
\newpage		

	\section{求解SLR(1)表格}
		根据表达式进行作图，由于共有16个状态，因此为了方便，使用iodraw绘制图像，如下图所示：
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot002}
			\caption{}
			\label{fig:screenshot002}
		\end{figure}
		
		红色区域表示可接受状态，将上述DFA制作SLR(1)表格，如下图所示：
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot003}
			\caption{}
			\label{fig:screenshot003}
		\end{figure}

\newpage		
		
	\section{代码修改}
		
		首先将action[12][6] ，
		gotoarr[12][3]，
		vt[6]         都更换为新的内容，然后修改代码细节部分：
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot004}
			\caption{}
			\label{fig:screenshot004}
		\end{figure}
		
		judge 函数的j参数，需要修改为新的非终结符的数量，即为8,
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot005}
			\caption{}
			\label{fig:screenshot005}
		\end{figure}
		
		输出参数也修改为新的数量。
	
	\section{运行效果图}
		
		测试用例使用i-i*(i/(i+i))，运行效果如下图所示：
		
		\begin{figure}[tbph!]
			\centering
			\includegraphics[width=0.7\linewidth]{screenshot006}
			\caption{}
			\label{fig:screenshot006}
		\end{figure}
		
	
\end{document}

















